package br.com.klanpaia;


import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Camera;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;

public class Controle implements InputProcessor{

	public enum Direcao  {
		Cima, Baixo, Direita, Esquerda, Nada
	}

	private RetornaData data;
	private Camera camera;
	public Vector3 touchDown;
	public Vector2 vec2Touch;
	private Direcao direcional;
	public Direcao Horizontal = Direcao.Nada;
	public Direcao Vertical = Direcao.Nada;
	private boolean botaoPressionado;
	private boolean movimentouMouse;
	


	public Controle(RetornaData data, Camera camera, Vector3 touchDown) {
		super();
		vec2Touch = new Vector2();
		this.data = data;
		this.camera = camera;
		this.touchDown = touchDown;
		this.setMovimentouMouse(false);
	}

	@Override
	public boolean keyDown(int keycode) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean keyUp(int keycode) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean keyTyped(char character) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean touchDown(int x, int y, int pointer, int button) {
		this.setMovimentouMouse(true);
		this.setBotaoPressionado(true);
		  //Verificar todos os itens ;3
	  
	  
		touchDown.x = x; touchDown.y = y;
	    camera.unproject(touchDown);
	    
	    data.retornaColisao(this, new Rectangle(touchDown.x, touchDown.y, 0.5f, 0.5f));
	    
	    
	    data.retornaData("Ator");
	    direcional(data.getPosicaoX(), data.getPosicaoY(), touchDown.x, touchDown.y);
	 
	  
		
		return false;
	}

	@Override
	public boolean touchUp(int screenX, int screenY, int pointer, int button) {
		this.setDirecional(Direcao.Nada);
		this.setBotaoPressionado(true);
		return false;
	}

	@Override
	public boolean touchDragged(int x, int y, int pointer) {
		//direcional(data.getPosicaoX(), data.getPosicaoY(), touchDown.x, touchDown.y);	
	     touchDown.x = x; touchDown.y = y;
		 camera.unproject(touchDown);
		 this.setMovimentouMouse(true);
		return false;
	}

	@Override
	public boolean mouseMoved(int screenX, int screenY) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean scrolled(int amount) {
	
		return false;
	}
	
	

	public void direcional(float corpoX, float corpoY, float touchX, float touchY){

		float conta1, conta2;
		
		if(corpoX < touchX){
			Horizontal = Direcao.Direita;
			conta1 = touchX - corpoX ;
		} else {
			conta1 = corpoX - touchX;
			Horizontal = Direcao.Esquerda;
		}
			
		
		if(corpoY < touchY){
			conta2 =  touchY - corpoY;
			Vertical = Direcao.Cima;
		
		} else {
			Vertical = Direcao.Baixo;
			conta2 =   corpoY - touchY;
		}
		
		
		if(conta1 > conta2){
			direcional = Horizontal;
		} else {
			direcional = Vertical;
		}
		

	}

	
	/**
	 * @return the botaoPressionado
	 */
	public boolean isBotaoPressionado() {
		return botaoPressionado;
	}

	/**
	 * @param botaoPressionado the botaoPressionado to set
	 */
	public void setBotaoPressionado(boolean botaoPressionado) {
		this.botaoPressionado = botaoPressionado;
	}

	/**
	 * @return the direcional
	 */
	public Direcao getDirecional() {
		return direcional;
	}

	/**
	 * @param direcional the direcional to set
	 */
	public void setDirecional(Direcao direcional) {
		this.direcional = direcional;
	}
	

	/**
	 * @return the movimentouCamera
	 */
	public boolean isMovimentouMouse() {
		return movimentouMouse;
	}

	/**
	 * @param movimentouCamera the movimentouCamera to set
	 */
	public void setMovimentouMouse(boolean movimentouMouse) {
		this.movimentouMouse = movimentouMouse;
	}
	
}
